<?php

namespace common\widgets;

use common\helpers\Html;
use common\modules\user\models\User;
use yii\helpers\ArrayHelper;

/**
 * 提供下拉选择用户的组件
 * TODO 动态加载和支持搜索
 *
 * @package common\modules\user\widgets
 */
class SelectUserWidget extends Select2
{

    /**
     * @var bool 是否只显示当前静态用户信息
     */
    public $isStatic = false;

    /**
     * @var bool 显示一个hidden输入
     */
    public $showHiddenInput = false;

    /**
     * @inheritdoc
     */
    public function init()
    {
        if ( ! $this->isStatic)
        {
            $this->data = ArrayHelper::map(User::find()->all(), 'id', function ($model, $default) {
                return $this->formatUsername($model, $default);
            });
        }

        parent::init();
    }

    /**
     * 格式化用户名
     *
     * @param User   $model
     * @param string $default
     * @param bool   $encodeTag
     * @return string
     */
    public function formatUsername($model, $default = '', $encodeTag = false)
    {
        if ($model)
        {
            if ($encodeTag)
            {
                return '<strong>' . $model->username . '</strong> &lt;' . $model->email . '&gt;';
            }
            return $model->username . ' <' . $model->email . '>';
        }
        return $default;
    }

    /**
     * @inheritdoc
     */
    public function renderWidget()
    {
        if ($this->isStatic)
        {
            $opts = $this->options;

            // 格式化输出用户名格式
            /** @var User $user */
            $user = User::findOne($this->value);
            $value = $this->formatUsername($user, '', true);
            if ( ! $value)
            {
                $value = '--';
            }

            Html::addCssClass($opts, 'form-control-static');

            $out = Html::tag('p', $value, $opts);

            if ($this->showHiddenInput)
            {
                echo $out . Html::hiddenInput($this->attribute, $value, $opts);
            }
            echo $out;
        }
        else
        {
            parent::renderWidget();
        }
    }
}
